const moduleA = {
  namespaced: true,
  state() {
    return {
      count: 10,
      name: "tom",
      age: 20,
      likes: ["唱", "跳", "吃"],
      arr: [1, 2, 3, 4, 5, 6, 7],
    };
  },
  getters: {
    // getters可以接受一个参数是state
    oddArr(state) {
      return state.arr.filter((item) => item % 2);
    },
    // 还可以接受第二个参数是getters，一个getters可以依赖于另一个getters
    oddArrLength(state, getters) {
      return getters.oddArr.length;
    },
    // getters还能够做传参
    doubleCount: (state) => (n) => {
      return state.count * n;
    },
  },
  mutations: {
    // 第一个参数是state
    // 第二个参数是payload(载荷, 传递的参数)
    add(state, payload) {
      console.log(payload);
      state.count += payload.n;
    },
    // 开发工具上面的记录的改变是在mutations函数被调用的时候产生的
    // 而不是在state的数据被修改的时候产生的
    // mutations里面只能使用同步函数
    // 如果写异步，就会让实际的数据和开发工具的记录对应不上
    doubleAge(state) {
      setTimeout(() => {
        state.age *= 2;
      }, 500);
    },

    increment(state, payload) {
      state.count += payload.n;
    },
  },
  actions: {
    // 参数是context，直接使用参数结构commit
    // 第二个参数是payload
    incrementAsync({ commit }, payload) {
      setTimeout(() => {
        commit("increment", payload);
      }, 1000);
    },
  },
};

export default moduleA;
